package com.cuz.daileetcode;

import com.cuz.daileetcode.utils.ListNode;
import com.cuz.daileetcode.utils.ListNodeUtils;

/**
 * @description: 19. 删除链表的倒数第 N 个结点
 * 给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。
 *
 * 进阶：你能尝试使用一趟扫描实现吗？
 *
 *
 *
 * 示例 1：
 *
 *
 * 输入：head = [1,2,3,4,5], n = 2
 * 输出：[1,2,3,5]
 * 示例 2：
 *
 * 输入：head = [1], n = 1
 * 输出：[]
 * 示例 3：
 *
 * 输入：head = [1,2], n = 1
 * 输出：[1]
 *
 *
 * 提示：
 *
 * 链表中结点的数目为 sz
 * 1 <= sz <= 30
 * 0 <= Node.val <= 100
 * 1 <= n <= sz
 * @author cuzz
 * @date 23:45 2021/9/29
 * @version 1.0
 **/
public class Day12 {

    static class S1{
        public static void main(String[] args) {
            ListNode head = ListNodeUtils.listGenerate(1, 2, 3, 4, 5);
            ListNode listNode = removeNthFromEnd(head, 5);
            (listNode).print();
        }

        public static ListNode removeNthFromEnd(ListNode head, int n) {
            if (head==null){
                return null;
            }
            ListNode pre=head;
            ListNode after=head;
            int index = 0;
            for (; index < n; index++) {
                pre=pre.next;
                if (index!=n-1&&pre==null){
                    return head;
                }
            }

            if (index==n&&pre==null){
                head=head.next;
                return head;
            }
            while (pre.next!=null){
                pre=pre.next;
                after=after.next;
            }
            ListNode needDel=after.next;
            after.next=needDel.next;
            return head;
        }


    }
}
